package top.minuy.structure.stack;

import top.minuy.structure.linear.array.Array;
/**
 * @author Minuy
 * @time 11:29
 * @date 2021/8/22
 */
public class ArrayStack<E> implements Stack<E> {

    private Array<E> array;

    public ArrayStack(int capacity){
        this.array = new Array<E>(capacity);
    }

    public ArrayStack(){
        this.array = new Array<E>();
    }

    /**
     * 入栈，向栈中添加一个元素
     *
     * @param e 要添加的元素
     */
    @Override
    public void push(E e) {
        this.array.addLast(e);
    }

    /**
     * 出栈，从栈顶拿出一个元素
     *
     * @return 拿出的元素
     */
    @Override
    public E pop() {
        return this.array.removeLast();
    }

    /**
     * 看一下栈顶的元素是谁
     *
     * @return 栈顶的元素
     */
    @Override
    public E peek() {
        return this.array.getLast();
    }

    /**
     * 获取栈中元素的个数
     *
     * @return 元素个数
     */
    @Override
    public int getSize() {
        return this.array.getSize();
    }

    /**
     * 看下栈是否为空
     *
     * @return 栈是否为空
     */
    @Override
    public boolean isEmpty() {
        return this.array.isEmpty();
    }

    /**
     * 获取栈容量
     * @return 容量
     */
    public int getCapacity(){
        return this.array.getCapacity();
    }

    @Override
    public String toString(){
        StringBuilder res = new StringBuilder();
        res.append(String.format("Array Stack : size = %d, capacity = %d\n",this.getSize(),this.getCapacity()));
        res.append("[");
        for (int i=0;i<this.getSize();i++){
            res.append(this.array.get(i).toString());
            if(i!=this.getSize()-1){
                res.append(", ");
            }
        }
        res.append("] top");

        return res.toString();
    }
}
